package com.zhu.tool_test.starke.util.md5;

import org.apache.shiro.crypto.hash.Md5Hash;

/**
 * @author Qicheng Peng
 * 字符串加密工具类
 */
public class EncodeUtils {
    private static Md5Hash md5Hash = new Md5Hash();

    public static String md5(String str, String salt) {
        md5Hash = new Md5Hash(str, salt);
        return md5Hash.toHex();
    }

    public static String md5(String str) {
        md5Hash = new Md5Hash(str);
        return md5Hash.toHex();
    }

    /**
     * 数采仪请求需要带的参数之一
     * 加密后的字符串，数采仪请求带的参数要与后端加密后获得字符串一致可以请求到数据
     *
     * @param mn        设备唯一标识
     * @param timestamp 请求时的时间戳(UNIX时间戳)
     * @return 获得加密字符串
     */
    public static String verify(String mn, Long timestamp) {
        // 将mn与时间戳做字符串拼接(注意不是数字相加只是拼接)
        String baseCode = mn + timestamp;
        // 字符串进行一次HASH
        Integer hashCode = baseCode.hashCode();
        // 将HASH后的值与时间戳相加
        long targetCode = hashCode + timestamp;
        // 最后对获得的字符串进行一次Md5
        return EncodeUtils.md5(Long.toString(targetCode));
    }
}
